#include <iostream>

template<class T> 
class tp_class 
{
public:
    tp_class(const T& value);
    void set_value(const T& value);
    const T& value() const;
private:
    T value_;
};

template<class T>
tp_class<T>::tp_class(const T& value) : value_(value) {}

template<class T>
void tp_class<T>::set_value(const T& value) { value_ = value; }

template<class T>
const T& tp_class<T>::value() const { return value_; }

//template<class T> tp_class<T> make_tp_class(const T& t);
template<class T>
tp_class<T> make_tp_class(const T& t) { return tp_class<T>(t); }
